// 文档: http://www.mongoosejs.net/

/*
多表查询:1.管道 2.ref关联poplue
*/
const mongoose = require('mongoose')
mongoose.connect(
  'mongodb://localhost:27017/nestjs',
  { useNewUrlParser: true, useUnifiedTopology: true, autoIndex: false },
  function (err) {
    if (err) {
      console.log(err)
      return
    }
    console.log('数据库连接成功')
  }
)

const WebSchema = mongoose.Schema(
  {
    title: {
      type: String,
      trim: true,
      alias: 'myname',
      set: function (val) {
        console.log('val: ', val)
        return 'val:' + val
      },
      // get: function () {},
    },
    age: {
      type: String,
      index: true,
    },
    up: {
      type: Date,
      default: Date.now(),
    },
    content: String,
    data: Date,
    status: {
      type: Number,
      default: 1,
    },
  },
  {
    id: false,
    timestamps: {
      createdAt: '创建时间',
    },
  }
)

// 实例方法: 给model->new出来的实例添加方法 w.speak()
WebSchema.methods.speak = function () {
  const res = this.title ? `我是${this.title}` : '没有名称'
  console.log(res)
}
// 静态方法: 添加model上静态方法 WebSchema.hello()
WebSchema.statics.hello = function (name, cb) {
  return this.find({ title: name }, cb)
}
//查询助手: 给实例增加链式的query Animal.find().byName('fido')
WebSchema.query.byname = function (name) {
  return this.find({ title: name })
}

// 默认建立第一个参数(model名称)的复数的表,第三个可以指定表名
const WebModel = mongoose.model('web', WebSchema)
// const WebModel = mongoose.model('web', WebSchema, 'web')

WebModel.create(
  {
    title: '前端',
    age: '三大发送到',
    content: 'html,js,css',
  },
  function (err, doc) {
    console.log('doc: ', doc)
  }
)

// WebModel.insertMany

// model的实例
// const w = new WebModel({
//   title: '    移动端22   ',
//   content: 'nodejs,mysql',
//   data: Date.now(),
// })
// w.save(function (err, doc) {
//   w.speak()
// })
// WebModel.hello('移动端22', function (err, docs) {
//   console.log('docs: ', docs)
// })
module.exports = mongoose
